// Copyright 2011: Thiago Noronha (tfn@dcc.ufmg.br)

#ifndef CSP_CHRONOMETER_H_
#define CSP_CHRONOMETER_H_

#include <stdint.h>

class Chronometer {
 private:
  // Numero inteiro que armazena o instante de tempo (em segundos)
  // que se inicia a contagem de tempo do cronometro.
  uint64_t time;

  // Numero inteiro que armazena o instante de tempo  (em segundos)
  // que a contagem de tempo do cronometro foi interrompida.
  uint64_t stopped;

 public:
  // Cria um cronometro parado e zerado.
  Chronometer();

  // Retorna o instante de tempo em que se encontra o sistema operacional.
  uint64_t Time();

  // Reinicia a contagem de tempo.
  void Reset();

  // Interrompe a contagem de tempo.
  void Stop();

  // Continua a contagem de tempo do ponto em que foi interrompida pela
  // funcao Stop.
  void Continue();

  // Retorna o valor do cronometro em segundos.
  uint64_t Value();

  // Retorna o valor do cronometro em segundos, com uma precisao maior que a
  // funcao Valor.
  double dValue();
};

#endif  // CSP_CHRONOMETER_H_
